package com.airlines.crewassignment.dao;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.airlines.crewassignment.domain.DateTimeRange;
import com.airlines.crewassignment.domain.FlightInfo;

/**
 * @author xxxx
 * @date 2018年3月27日 
 * @description
 */
public interface FlightInfoMapper {
	/**
	 * 按照组合条件查询航班信息
	 * @param flightInfo
	 * @return
	 */
	List<FlightInfo> listFlightInfo(FlightInfo flightInfo);

	/**
	 * 按照飞行日期+工号查询该员工相关的所有飞行航班
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<FlightInfo> listFlightInfoForCrew(@Param("dutyCode")String dutyCode,@Param("dateTimeRange")DateTimeRange dateTimeRange, @Param("workcode")String workcode);

	/**
	 * 查询某天未组连线的航班
	 * @param dutyCode
	 * @param flightDate
	 * @return
	 */
	List<FlightInfo> listFlightNotHaveCrewLinkLine(@Param("dutyCode")String dutyCode,@Param("flightDate") Date flightDate);
	
	/**
	 * 根据主键查询flight
	 * @param flightId
	 * @return
	 */
	FlightInfo selectByPrimaryKey(@Param("flightId")Integer flightId);
	
	
	/**
	 * 根据模块+日期+连线号查询航班
	 * @param dutyCode
	 * @param flightDate
	 * @param crewLinkLineNo
	 * @return
	 */
	List<FlightInfo> listFlightInfoByCrewLinkLineNo(@Param("dutyCode")String dutyCode,@Param("flightDate") Date flightDate,
			@Param("crewLinkLineNo") Integer crewLinkLineNo);
	
	/**
	 * 更新T2001表连线号，其中如果更新crewLinklineNoF，则同时更新  CREW_LINK_LINE_F 、 CREW_LINK_LINE 
	 * @param flightId
	 * @param crewLinklineNoF
	 * @param crewLinklineNoC
	 * @param crewLinklineNoA
	 * @return
	 */
	int updateCrewLinkLineNo(@Param("flightId")Integer flightId,
			@Param("crewLinklineNoF")Integer crewLinklineNoF,
			@Param("crewLinklineNoC")Integer crewLinklineNoC,
			@Param("crewLinklineNoA")Integer crewLinklineNoA);

	/**
	 * 查询同一个任务环的航班
	 * @param dutyCode
	 * @param taskLoopFact
	 * @return
	 */
	List<FlightInfo> listFlightInfoByTaskLoopFact(@Param("dutyCode")String dutyCode, @Param("taskLoopFact")String taskLoopFact);

	/**
	 * 查询某一段时间内航班列表
	 * @param flightDateStart
	 * @param flightDateEnd
	 * @return
	 */
	List<FlightInfo> listFlightInfoByDateTimeRange(@Param("flightDateStart")Date flightDateStart, @Param("flightDateEnd")Date flightDateEnd);
	
	/**
	 * 将T2001的连线信息更新为null
	 * @param dutyCode
	 * @param dateTimeRange
	 */
	int updateCrewLinkLineNoNull(@Param("dutyCode")String dutyCode,@Param("dateTimeRange")DateTimeRange dateTimeRange);


	/**
	 * 根据航班id查询航班信息
	 * @param flightIds
	 * @return
	 */
	List<FlightInfo>  batchSelectInfo (List<String>  flightIds);
	
	/**
	 * 将某一段时间范围内的航班的所有已经排班的人员列表查询
	 * @param dateTimeRange
	 * @return
	 */
	List<FlightInfo> listFlithtInfoOfCrewWorkcodesAll(@Param("dateTimeRange")DateTimeRange dateTimeRange);
	/**
	 * 根据(...可空...)获取最后飞行日期
	 * @return
	 */
	Date getLastFlightDate(FlightInfo flightInfo);
}
